package org.example.day04;

import java.util.Arrays;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO
 * <p>  用数组代表每个人的能力，一个比赛活动要求参赛团队的最低能力值为N，每个团队可以由1人或2人组成，且1个人只能参加1个团队，请计算出最多可以派出多少支符合要求的团队？<span></span>  </p>
 * @date 2024/3/11 15:22
 */
public class test070 {
    public static int maxTeams(int[] abilities, int minCapability) {
        // 首先对能力数组进行排序
        Arrays.sort(abilities);

        // 初始化团队计数和当前索引
        int teamCount = 0;
        int currentIndex = 0;

        // 当还有剩余能力值可以分配时，继续循环
        while (currentIndex < abilities.length) {
            // 如果当前人的能力值满足最低要求，则他可以单独成为一个团队
            if (abilities[currentIndex] >= minCapability) {
                teamCount++;
                currentIndex++;
            } else {
                // 否则，尝试与下一个能力值最低的人配对
                if (currentIndex + 1 < abilities.length && abilities[currentIndex] + abilities[currentIndex + 1] >= minCapability) {
                    // 如果配对成功，则团队计数增加，并且跳过下一个人
                    teamCount++;
                    currentIndex += 2;
                } else {
                    // 如果当前人单独无法满足要求，并且没有下一个人可以配对，则不能形成团队
                    currentIndex++;
                }
            }
        }

        // 返回可以形成的最大团队数
        return teamCount;
    }

    public static void main(String[] args) {
        int[] abilities = {2, 5, 3, 6, 2, 3, 7}; // 每个人的能力值
        int minCapability = 5; // 最低能力值要求

        int maxTeams = maxTeams(abilities, minCapability);
        System.out.println("最多可以派出 " + maxTeams + " 支符合要求的团队");
    }
}
